package site.wanjiahao.set;

import site.wanjiahao.map.HashMap;
import site.wanjiahao.map.Map;

/**
 * 使用红黑树，构造集合，但是需要注意的是，元素必须具有可比较性
 * @param <E>
 */
public class HashSet<E> implements Set<E>{

    private final Map<E, Object> map = new HashMap<>();

    @Override
    public int size() {
        return map.size();
    }

    @Override
    public boolean isEmpty() {
        return map.isEmpty();
    }

    @Override
    public void clear() {
        map.clear();
    }

    @Override
    public boolean contains(E ele) {
        return map.containsKey(ele);
    }

    @Override
    public void add(E ele) {
        // 直接添加，元素已经除去重复
        map.put(ele, null);
    }

    @Override
    public void remove(E ele) {
        map.remove(ele);
    }

    @Override
    public void traversal(Consumer<E> consumer) {
        map.traversal(new Map.Consumer<E, Object>() {
            @Override
            public boolean accept(E key, Object value) {
                consumer.visit(key);
                return false;
            }
        });
    }
}
